package com.z1.core.data.imports.excel;
///*******************************************************************************
// * 文件名: UserMgrImpl.java
// * 描    述: Excel读取抽象类
// * 创建人: Dean Huang(hudi-112@163.com)
// * 日　期: 2017-12-22
// * 描　述: 文件描述
// * 版　本: 1.0
// *******************************************************************************/
//
//package com.team.quickerp.util.imports.excel;
//
//import java.io.File;
//import java.io.FileInputStream;
//import java.util.ArrayList;
//import java.util.List;
//
//import org.apache.poi.hssf.usermodel.HSSFWorkbook;
//import org.apache.poi.openxml4j.opc.OPCPackage;
//import org.apache.poi.poifs.filesystem.POIFSFileSystem;
//import org.apache.poi.ss.usermodel.Cell;
//import org.apache.poi.ss.usermodel.Row;
//import org.apache.poi.ss.usermodel.Sheet;
//import org.apache.poi.ss.usermodel.Workbook;
//import org.apache.poi.xssf.usermodel.XSSFWorkbook;
//
///**
// * @Description 
// * @Create Date:Apr 28,2014
// * @author Dean Huang
// *
// */
//public abstract class ExcelRead<T> {
//	//上传Excel对象
//	private Workbook workbook = null;
//	//文件读取流对象
//	private FileInputStream input = null;
//	//文件对象
//	private File file = null;
//	
//	//上传数据集
//	private List<T> valueList = null;
//	
//	//进度
//	//总上传条数
//	private long sum = 0L;
//	//当前上传条数
//	private long cur = 0L;
//	
//	//每次取数据条数上限
//	private int step = 6000;
//	
//	//上传断点
//	//文档Sheet数量
//	private int sumSheet = 0;
//	//当前Sheet编号
//	private int curSheet = 0;
//	//当前Sheet读取记录
//	private int sheetCur = 1;
//	
//	public ExcelRead(File f) throws Exception {
//		try {
//			this.file = f;
//			input = new FileInputStream(file);
//			workbook = createWorkbook(file, input);
//			//记录总数
//			//sheet数
//			sumSheet = workbook.getNumberOfSheets();
//			//row数
//			for (int i = 0; i < sumSheet; i++) {
//				sum += workbook.getSheetAt(i).getLastRowNum();
//			}
//			//初始化
//			this.valueList = new ArrayList<T>();
//		}
//		catch (Exception e) {
//			try {
//				if (null != input) {
//					input.close();
//					input = null;
//					workbook = null;
//				}
//			}
//			catch (Exception ex) {}
//			throw e;
//		}
//	}
//	
//	private Workbook createWorkbook(File file, FileInputStream input) throws Exception {
//		Workbook workbook = null;
//		if (file.getName().endsWith(".xls")) {
//			POIFSFileSystem fs = new POIFSFileSystem(input);
//			workbook = new HSSFWorkbook(fs);
//		}
//		else if (file.getName().endsWith(".xlsx")) {
//			OPCPackage op = OPCPackage.open(input);
//			workbook = new XSSFWorkbook(op);
//		}
//		return workbook;
//	}
//	
//	public boolean nextData() throws Exception {
//		if (null == input || null == workbook) {
//			return false;
//		}
//		try {
//			valueList.clear();
//			loop1:while(curSheet < sumSheet) {
//				Sheet sheet = workbook.getSheetAt(curSheet);
//				
//				for (int j = sheetCur; j <= sheet.getLastRowNum(); j++) {
//					Row row = sheet.getRow(j);
//					
//					T t = getValues(getRow(row));
//					if (null != t) {
//						valueList.add(t);
//						cur++;
//						if (0 != cur && 0 == cur % step) {
//							break loop1;
//						}
//					}
//				}
//				if (0 != cur && 0 == cur % step) {
//					break;
//				}
//				curSheet++;
//				sheetCur = 1;
//			}
//		}
//		catch (Exception e) {
//			throw e;
//		}
//		finally {
//			if (cur >= sum) {
//				try {
//					if (null != input) {
//						input.close();
//						input = null;
//						workbook = null;
//						//file.delete();
//					}
//				}
//				catch (Exception e) {}
//			}
//		}
//		return !valueList.isEmpty();
//	}
//	
//	/**
//	 * 获取行数据
//	 * @param cell
//	 * @return
//	 */
//	private List<Object> getRow(Row row) {
//		if (null == row) {
//			return null;
//		}
//		List<Object> values = new ArrayList<Object>();
//		try {
//			for (int w = 0; w < row.getLastCellNum(); w++) {
//				Cell cell = row.getCell(w);
//				if (null == cell) {
//					values.add(null);
//					continue;
//				}
//				switch (cell.getCellType()) {
//				case Cell.CELL_TYPE_STRING : values.add(cell.getStringCellValue());break;
//				case Cell.CELL_TYPE_NUMERIC : values.add(String.valueOf(cell.getNumericCellValue()));break;
//				case Cell.CELL_TYPE_BOOLEAN : values.add(cell.getBooleanCellValue() ? "0" : "1");break;
//				case Cell.CELL_TYPE_FORMULA : 
//					if (!cell.getStringCellValue().equals("")) {
//						values.add(cell.getStringCellValue());
//					}
//					else {
//						values.add(cell.getNumericCellValue() + "");
//					}
//					break;
//				case Cell.CELL_TYPE_BLANK : 
//				case Cell.CELL_TYPE_ERROR : values.add("");break;
//				default : values.add(cell.toString());
//				}
//			}
//		}
//		catch (Exception e) {
//			e.printStackTrace();
//		}
//		return values;
//	}
//	
//	public List<T> getValueList() {
//		return valueList;
//	}
//	
//	public long getSum() {
//		return sum;
//	}
//
//	protected abstract T getValues(List<Object> values);
//
//}
